module qmcmary


using LinearAlgebra

include("core/hstrans.jl")
export fakedata, bmat_Ising, Δmat_Ising, bmat_IsingAD, bmat_IsingND, Δmat_IsingND
export bmat_IsingADX, bmat_IsingADTX
export bmat_IsingZMuAD, bmat_IsingZMuND
export bmat_Gauge1ADX, bmat_Gauge1AD, bmat_Gauge1ND, Δmat_Gauge1ND
export bmat_Quad1ADX, bmat_Quad1AD, bmat_Quad1ND, Δmat_Quad1ND
export bmat_Quad2ADX, bmat_Quad2AD, bmat_Quad2ND, Δmat_Quad2ND

include("core/scrollstable.jl")
export ScrollSVD, ScrollSVDZ, ScrollIter, scrollL2R, scrollR2L

include("core/splitting.jl")
export Splitting, default_splitting, unpack_splitting
export default_splitting2, default_splitting3

include("core/syntaxmisc.jl")
export @✓, @←, @↻, @↺

include("core/mechlrn.jl")
export @autojac, @autojac2, Adam, next, AutoJacTape

include("common.jl")
export lattice_chain, lattice_hexagonal, lattice_kagome, lattice_ionic_square, lattice_ionic_chain
export lattice_tprim_square, lattice_bilayer_square, lattice_checkerboard_square

include("adso.jl")
export pbpn_calc, pbpn_calc_xi, bbar_calc, bbar_from_gbar, meas_grad, gbar_scratch, down_prog_gbar
export pbpn_calc_tapemap
export meas_gradU, pbpU_calc_tapemap, pbpU_calc_xi
export pbpa_calc_tapemap, pbpa_calc_xi, meas_grada
export pbpU_calc_tapemap_Quad1, pbpU_calc_xi_Quad1, meas_gradU_Quad1
export pbpUabnm_calc_tapemap, pbpUabnm_calc_xi, meas_gradUabnm

include("adso2.jl")
export meas_gradmu, pbpmu_calc_tapemap, pbpmu_calc_xi
export meas_gradtp, pbptp_calc_tapemap, pbptp_calc_xi
export meas_gradϕ, pbpϕ_calc_tapemap, pbpϕ_calc_xi
export meas_gradϕ2, pbpϕ2_calc_tapemap, pbpϕ2_calc_xi

include("dqmc.jl")
export eq_green_scratch, down_prog_green, up_prog_green, qmcstatus, Woodbury, PressShermanMorrison!
export ueq_green_scratch
export initialize_SS, dqmc_step
export ueq_green_func
export initialize_SS_Gauge1, dqmc_step_Gauge1
export initialize_SS_Quad1, dqmc_step_Quad1
export initialize_SS_Quad2, dqmc_step_Quad2


end # module qmcmary
